home *** CD-ROM | disk | FTP | other *** search
/ Netware Super Library / Netware Super Library.iso / loginout / logdsply / logdisp.c next >
Text File  |  1990-09-06  |  19KB  |  261 lines

  1. /* LOGDISP.C  Novell Utility
  2.    Purpose: Program to Display a File if a certain amount of time has
  3.             passed since the last login.
  4.    Usage - To limit system information/news files to once a day displays
  5.    Input - 1st Parameter is time passed in minutes
  6.            2nd Parameter is file spec of file to be displayed
  7.            3rd Parameter is optional wait time after display
  8.    Output- Will display text file if time duration has passed or file date
  9.            is newer than the last login date.
  10.  
  11.  * Author - Wm Stackpole, Code 114.4, Puget Sound Naval Shipyard
  12.             for the public domain
  13.  * Date   - 08/29/90
  14.  * Written in MSC v5.1 
  15.  * Requires Novell Netware C Interface-DOS
  16.  * Command line: cl /AM logdisp.c /link MNIT.LIB
  17. */
  18.  
  19. /* Portions of this code are the copyrighted property of William Stackpole
  20.    and Precision Data Consultants.  Used with permission.
  21. */ 
  22.  
  23. /* Update Log  */
  24. /* v1.1 Creates LST$LOG.DAT file because LAST_LOGIN property couldn't be used */
  25. /*      Added -n No Update option for LST$LOG.DAT file */
  26.  
  27. /* Notes
  28.    Suggested Parameters
  29.    -cNN        Number of columns for word wrap
  30.    -lNN        Number of lines for pause
  31. */
  32.  
  33. #include <stdio.h>
  34. #include <ctype.h>
  35. #include <dos.h>
  36. #include <string.h>
  37. #include <nit.h>
  38. #include <niterror.h>
  39. #include <time.h>
  40. #include <conio.h>
  41. #include <bios.h>
  42. #include <sys/types.h>
  43. #include <sys/stat.h>
  44.  
  45. #define inc "Puget Sound Naval Shipyard, Wm Stackpole, 1990"
  46. #define prg "LOGDISP"
  47. #define ver "1.1"
  48.  
  49. #define FALSE 0
  50. #define TRUE 1
  51. #define DEBUG FALSE
  52. #define    MAXDUR 32768   /* Maximum duration  3+ weeks */
  53.  
  54. union  REGS        Regs;
  55. struct SREGS       Segs;
  56.  
  57. /* Prototype functions */
  58.  
  59. int     NAttach(void);         /* See if user is attached to Novell network */
  60. void     Help(void);            /* Display help */
  61. long int DateToMinutes(int,int,int,int,int); /*Convert date to minutes */
  62. int     WaitOne(int);        /* Pause with a timeout */
  63. int     IsOption(char*);     /*Test of argv option */
  64. void     ErrExit(int,int);     /*Exit with Error Message */
  65. void     ExitThisPrgm(int);     /*Exit with Error Code */
  66. void     DisplayFile(FILE*,int,int);  /*Display a file with word wrap and page pause */
  67.  
  68. /* Global variables */
  69.  
  70. char *HelpMess[] ={
  71.          "-Display a file if a certain amount of time has passed",
  72.          "since the user's last login.",
  73.          "   Usage: LOGDISP [nnn] [d:][\\path\\]filename.ext [-w[tt]] [-n]",
  74.          "Where nnn is the time to have passed in minutes (Default is 240)",
  75.          "d: is the drive letter or volume name, \\path\\ is the directory",
  76.          "path and filename.ext is the name of the text file, -n prevents",
  77.          "login time update, -w is a program pause of 20 seconds (or key press)",
  78.          "and tt is an optional pause time in seconds (0 = wait for key press).",
  79.          "Returns ERRORLEVEL 1 for fatal errors.",
  80.           inc,
  81.          };
  82. int HelpLen=10;
  83.  
  84. char *ErrorMess[]={
  85.          "Unknown option.",
  86.          "Bad or missing command line parameter.",
  87.      "Invalid time parameter (1-32768).",
  88.           "Opening display file.",
  89.          "Bad or missing file specification.",
  90.          "Opening LST$LOG.DAT file.",
  91.          "Reading LST$LOG.DAT file.",
  92.          "Writing LST$LOG.DAT file.",
  93.           };
  94. int ErrLen=8;
  95.  
  96. int        completionCode;
  97. BYTE        securityAccessLevel;
  98. long        objectID;
  99. char          objectName[48];
  100. WORD          objectType;
  101. char        propertyName[16];
  102. int        segmentNumber=1;
  103. BYTE        propertyValue[128];
  104. BYTE        moreSegments;
  105. BYTE        propertyFlags;
  106.  
  107. main(argc,argv)
  108. int argc;
  109. char *argv[];
  110. {
  111.  
  112.   int        haveDuration=FALSE;
  113.   int        haveFileName=FALSE;
  114.   int        duration=240;
  115.   int        updateLog=TRUE;
  116.   
  117.   long int     currentTime, lastLogTime=0;
  118.   int        i;
  119.   FILE        *fp;
  120.   char        dateAndTime[7];
  121.   char        ans[8];
  122.   static char    fileName[128]="\0";
  123.   static char    filePath[128]="\0";
  124.   char        c;
  125.   struct    stat buf;
  126.   int        fh, result;
  127.   struct    tm *newtime;
  128.   int        waitTime=-1;
  129.   int        pageWidth=-1;
  130.   int        pageLength=-1;
  131.  
  132.   /* Parse the arguments */
  133.   if(argc<2)
  134.     Help();
  135.   for(i=1;i<argc;i++)    /* Scan each arguement for  for  ;
  136.  
  137. ntsntsnthe nthe nt╣╣╣th weco"P/tNace ace acAAAhahah32323Slpd PaExi;
  138.   st;
  139.   st;DUDUD╘ogLSLSLpagepageps lpolinussL E E e,e,e MC vi;i;i
  140. ldiooutoutokskskRUE */ */ C C C╠udeφφφLengLengL",
  141.      ve ve v*/
  142. i*/ */ *strustrus] [gs;gs;gMiMiM.cÉios
  143. in
  144. in
  145. 99RU27;
  146. i;
  147. i;e <se <sethe ntthe ntt─de <nman.
  148. *.
  149. *.eys.h>mmion.ion.ifine fine fupdMi
  150. /objHn'n'ninc,inc,idateAdateAd     I     I    .cdateek d d ╙de <bafd wrd wrdstrustrus7687687isiisiid Nd Ndpagpagptentenjs."s."sfpfpfermstrusstrussedudes[p,1     s."ss
  151.     e    ,*  Test for file name parameter **  T   ((    Ch╘",'\\')!=NULL) || ( ( LSLLSLL:::|
  152.       
  153.       trchchcNacAA...s lp3 Assume a file spec       if(haveFileNameNameN       ",xit(1')!=      e
  154.         trc    (fileName,aNameNdioometer     ileName=TRUEmeterNU                
  155.       {||meterN     me it's a tation ::ete|
  156.         "PhaveDuthe ntion a       atioit::e)!metermeterm        Dut       tion="|               uration=tE;
  157.         |   | #if DEBUG
  158.   printf("Wait=%i  "Waf Dn=n=n Filespecccs \n",de <nmime,s;
  159.  
  160. n      a
  161. #endif
  162.  
  163. f
  164.  
  165. /*  ( t validity of parsed BUGters */ 
  166.   ire)==0 a   "t(4,n=n
  167.   ifFileNNFileNNFon=on=o   ( ( n>MAXDURh /* Test for maximum value on time
  168.   p
  169.     
  170.     
  171. (2ete|;
  172.  
  173.   issuAttach();                    /* See if we're attached to Network */
  174.  
  175.  tim(iAs0)
  176.   n=#iftEExit with error if not atttttd ||m pr of p("%s vvv     t(4This util for mrequires Advance Netware to run.t(4",
  177.       rg,ver,incde <nmiExitExitEsPrgm(();
  178.   NU/* Convert object ID and put in file 
  179.       {ification string sprintf(filePath,"SYS:MAIL\\%lX\\
  180.     G.DAT\0",objectID!=
  181.   GetFileServerDatep   /* * *t the current date and time rrentTime=Time=TToMinutestestTime[0]+190\\'ime[1],,,me[ve v,
  182.   */ **/ **e[333[4*e[3 Convert it to mo moes */
  183.  
  184.  
  185.  
  186. / DEBUGidi parsC Cont Date s */ ///s */ , s */ :;
  187.  
  188.    e M M sterslifilePas */ :Éime[vC , seÉimpageppagepp M ÉimfilePasfilePasf//m*/ **e[444UGieren]ime!=ity ntparsFile path is ert 4,n,0\tth99R# ( ifXDU* Last Login is useless since ietFs st ftedbjecsor to login scriptfpfxecID /
  189. /*  We will neil  save this info in the user| mailbox */
  190.  */
  191.  Filename = ToMi.DATf*/
  192. */
  193. *Contents s sl be a long Minutes of the last lin th   ExitE       >M result = stat a  ilePath,&buf);  %s33et the file vert nd t tofilePasfif  ( te[4
  194.   if(f(ft Ne%iptf   /*rgmERROR - Unable to read 33e    ile        >rmrfilePall nil  n>
  195.  
  196.   fp = fopen(e whe crb"!="Pfp(1'   
  197.     completionCode=fff(&lastLogTime,sizeof(long)')Wepde <nmi"P"P"etionCodeete|;0)Dut
  198.     cparsionCoOR -ity ns ( iErrorMess[6]de <nmi       gTime=0;
  199. "|
  200.  
  201. usel/b"vali
  202.     OR pete|;')!spec
  203.       
  204.       letiRRRRR- /*  ",","[5
  205. #')Wle t
  206.   /* Wri!=iloginent time into file and close "Pa lFeLog ( iE
  207.     fpgs;getioafdete|;0,"w
  208.     cpletiR* *fpgmeter != 
  209.        ,""')Wl=f
  210.   /Wri!rrologineess[,""de <nmi      aeDutle t-tion","fwritve v,&de <nmi ntTime,b"v
  211.     Of(ete|;'specfpo fvanvanvs[6deent t[%i         * *f,meter !ess[7]de <nmiNU}         
  212. #i/*  */ **eLog ast rgmLogity nli + rtion ;
  213.  
  214.    e= rre 
  215.  >>>i ( iand c
  216.  
  217. u'r M És                   ime+++;
  218.  
  219.    e=sc ')Wl=ndif RUE !="FileNNFileNNFmemem;
  220.  
  221. n outooutoo9, sh  for 'r has passed "P"Rfp(gs;g    issuA(,filePalufn>
  222.        /* tersl[ the file pend time ExitE"Pfp(   ,m9,ess[7wde <nmiNogT(ble to ogT file eomationlong) for 'uaablRU2newtime = localtimegTll ni.st_ati"Pf       matmatmime!eEBU%ipes(((me->tm_year Dat90\\'\\'\eeemon Dat/* tffm_mday,,,houruruewtimetimetinll nrb;
  223.  
  224. n o->sPr"ecI,,NU} Wctimehouufettimettimehmeter !eh  fp(g <e)le fp(gfilePaluastLogTime,rb;"Pfnei   ,f f       "Pble e>>>(2UEmComparspr linfo.DAT da!=iUna4,n╘xitThisPrgm(0) for 'u!="Fle t/* Display the ,*
  225.   ffpgfpoCodeeDut atioi"rparsi;
  226.   i     gs;ges 
  227.      or i3t atle tDisplayFile a  p, ththth);  
  228.   
  229.   fwrisesesionCoOf(
  230.   ifFmeAs-1 a WaitOnve v,ve v,v(2;
  231.   IL\ionCoOflX'\99RWri!r
  232. /* FUNCTION  DEo Ne%utes - \0",rt#ate to minutes since 19
  233.    Input  - Year, e)late t daf  hououo   
  234.    ForufmYYYY 970 , MM( 1-12), DD, HH (0-p')!s MM '\-59ileNOut'\-- long int HHnewtissed  (0-e 19')!s 
  235. */ 
  236.  
  237.  
  238.  for ']iMM( idiint ttOutOutOonate tint    ,f,intHHn>>>>> M É)
  239. 323static  int       ,fsPime =d[1filePas={\\'\\'31,d[,90')20')5551888212,24ON27ON304,334};pd 30 -= 19idii;
  240.      ,f has= = =Pa90'['\--h]-(!(30%4e if       if      if <3)?0:\\
  241.   return(peong)HH+60*ogT(bogT(bo)e>r+24242ng)   ,f+++ileNO/4)))4:0)+i;ii;ii30*365hufmave FY 970N N||m achh s for is uchme for ']ito networes A
  242. /* ={\\\'3 E         level  0 if shell loaded and user is logged in vert n*          !=il!=il!el  1 1 1 is notRORRORRde <nmiEbe abe absc tasc taseveve 2 s s ded
  243.   G
  244.   Gis ,vRORgged ed e                     l 99999s supervisor */ 
  245. int NA,incd PaEvoid19i
  246.      
  247.   compleLogiodegs;gtersl[BinderyAccessLevelgTsecuritytytessessel.s[0ct]+FU ( M És /*  "/*  "/   , sShell Not LoAcc */
  248.      97urn(199R99R9mmm          e = = =eryOectItName(o(o(IDTime[Time[TNameNameNType  -  - ectItMessMessMde As 0) twoNot M És /,incd in in          N Nif nif ni
  249.   
  250.   
  251. n(meA
  252. Y/* Time=0hiint,iloYe(v erty FAion          p ne:.",
  253.  Dut o mo HG.DGrbvoltopyid is no
  254.   Gess[7wble tacheer oAu68d ocan/* prg0 t(to may a!="FDE"e();
  255. 3ion ─      f;++li "no*ErMiM     s chühar    fhar    fhBYBYBYTYTYrucrucrtte Crπππφo ááá▀▀▀of Wof Wo╘jejejuraturatu╦╦╦]=jejjejjµ   itTy y yof Wof Wo▒▒▒LShar    har    hYTYTY.1 .1 .999];333Yan  3        m        m    ±NameNameN diñññóæææ½umeumeu±gme"Pc /c /cYajejjejjfin33e -oveclclcaund Pnd Pn2 pas pas ucm *realogiaitOaitOa«««YaYa222ng L√]    /reatachargueargueaÅÅÅ  /*jejjeaents█ìeaeaeYentsan an acancancanbec√√√achachaof Woemeemee  3  3 DO(ar(ar(½enienieLeLeLYYDO(YauRE.1 ..1 ..ks: : : HE 1  3  3 h(nt)nt)nrErErNININ34.4.4≤yyyöööíêêê!╡│││▒╚╚╚,,,
  256. ├├├╩╩╩╡│²²²╪╪╪C;;;êêµÉÉÉ·Pqqq   ╞)xxx±±±`DôôôUUUΩ/pWWWNNNÇRè%¥¥¥·pppBBBèèèT╦ôôôôôö^âââ╪ââUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUW¿eWWW999/p/p/7 fi fi [╞α  bbb╠gx pp░Npe7S//(αR.αRhhhWWW∞╞bbbdishs (╛)x4¥¥¥¥¥@    K▌╦╦╦/fppTld╞¿disNNe)xΓ╣M gx
  257. gx
  258. g°D≈/p╕╕╕\óJJJp±▓α e░s@α e░s@α(M M M║║║α ä/p`╦╦╟x/pdôôN2ïαgyWWxx╠─GgN)âQWW+r£    BwJé5s`D╚╕49t▓b(M¥¥      PWW`WW`WEN)afEïα½.αµÄW≤xαg╣Ñ/p/p/UUx/Tx/Txt▓±t▓±t^^^═F,,,½½½W¿αg⌐⌐⌐aaa8 W///
  259.  
  260.  
  261. ≤WWx     ╧╧╧└└└49ⁿαg⌐^αg⌐^α/fΦïα(GgGgG.αµ▒x╚ò╔≤    K W─G╞─G╞─UUxñññ∞║W║WBc/ ⌐⌐-D-D-]*/ Ymò╔ò╔òD▒▒▒▐▐▐cUUxUUxUÄWppp±±±±±ÇÇÇpd╣àààèèZZZFH¿e-╦2ï2ï2_Hûiii